There are many situations where a server system is configured to be accessed by multiple clients and where at least some of the functionality required by software at the client computer is provided by a remotely located machine, such as the server or another machine connected to the client. There are various different techniques to provide distributed functionality.
Conventional distributed computing technologies allow computer programs running in different address spaces and on different machines to communicate. These technologies are based on low-level network protocols such as TCP/IP. Currently, conventional distributed computing systems utilize two distinct technologies: remote procedure call methods, such as Sun Microsystem's RPC and RMI, and distributed object systems such as the Object Management Group's CORBA and Microsoft's DCOM.
Remote Procedure Calls allow a client computer to call a function which is executed on a server. A Remote Procedure Call (RPC) abstracts the communication interface to the level of a procedure call and gives a programmer of the client software to treat the function as a local procedure when in fact the arguments of the call are transmitted to the remote target of the call and the results are returned. RPC systems encode arguments and return values using an external data representation, such as XDR. Other common distributed object systems include CORBA (the Common Object Request Broker Architecture) and Microsoft's DCOM (Distributed Component Object Model). The conceptual underpinning of both of these systems is the notion of “distributed objects” which are viewed as an extension of the object-oriented paradigm across networks,
A significant drawback to both remote procedure and distributed object systems is that the client programs must have prior knowledge of the functions provided by the server and be specifically programmed to make use of these functions. As a result, when new functions are introduced, the client software must be upgraded to make use of new features provided by the server. Similarly, the client software must be specifically updated when a function is removed from the server. Moreover, if a function on a server becomes temporarily unavailable, e.g., as the result of a hardware failure, clients continuing to call the function will receive errors or other unexpected replies from the server.
Accordingly there is a need to provide an improved system for supplying distributed functionality across a network of servers and clients. There is a further need to provide a system which allows the clients to manipulate and display data without prior knowledge of the data types and services provided by the servers and to permit the clients to dynamically adapt to changes in available functionality.